iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Security

學分的追逐,資安的啟程系列 第 23

Day 23 XSS (四) -- Dom 型 XSS

  • 分享至 

  • xImage
  •  

今天挑戰的是 Dom型的XSS,一樣是從 Low level 開始

Low

我們會先看到這個頁面

https://ithelp.ithome.com.tw/upload/images/20231008/201627754OvgQTJi8y.png

打開 source code

https://ithelp.ithome.com.tw/upload/images/20231008/20162775h4AGbhdTNm.png

我們發現他這裡沒有任何 php 的 code

那我們打開 F12 看看

https://ithelp.ithome.com.tw/upload/images/20231008/201627755N6kgRiqRL.png

這裡發現我們的選項欄預設的文字會是 default 參數的文字

像是如果 default 的參數改 123 會變成這樣

https://ithelp.ithome.com.tw/upload/images/20231008/20162775t5t3YTIzDw.png

https://ithelp.ithome.com.tw/upload/images/20231008/20162775TPQvkJQTWu.png

那我們把 default 的參數改成 payload 呢

https://ithelp.ithome.com.tw/upload/images/20231008/20162775mUrhf9uNBR.png

XSS 成功!!!

https://ithelp.ithome.com.tw/upload/images/20231008/20162775GpCw51uwDD.png

https://ithelp.ithome.com.tw/upload/images/20231008/20162775j53BBwECbM.png

Medium

看看 source code

https://ithelp.ithome.com.tw/upload/images/20231008/20162775D27kvQjzcF.png

stripos()

他這裡把我們的 <script> 標籤過濾掉,並將 default 設為 English,而且 stripos 函數是不分大小寫的,所以這裡我們只能透過用其他標籤繞過的方式來做

https://ithelp.ithome.com.tw/upload/images/20231008/201627757aYgMsbgnt.png

可是如果我們直接打<img src="" onerror="alert(1)">,他在前端寫的 javascript 會直接把我們的 payload 塞進 <option> 的標籤當中,但在<option> 標籤中是不能包含 <img> 標籤的,而且外面還有一層<select>標籤,所以我們要關掉<option><select>標籤

https://ithelp.ithome.com.tw/upload/images/20231008/20162775ZVj1L5cYqA.png

XSS 成功!!!

https://ithelp.ithome.com.tw/upload/images/20231008/20162775k1FPob81tW.png

Highhttps://ithelp.ithome.com.tw/upload/images/20231008/20162775a6UhiTg7fs.png

一樣看 source code

https://ithelp.ithome.com.tw/upload/images/20231008/201627751oOahpU04G.png

他這裡透過白名單的方式去檢查 default 參數的值,那這樣我們該怎麼繞過呢

https://ithelp.ithome.com.tw/upload/images/20231008/201627757JrahRaBML.png

為什麼可以用 # 來繞過 ?
# 通常在 URL 中可以代表片段位置標誌,而不算在 GET 傳送資料的一部分,因此後端 PHP 不會接收到 # 之後的訊息,但前端部分仍然會進行解析而導致XSS漏洞

同理

因為後面的資料不算在 default 的參數內,所以不會被 PHP 處理

XSS 成功!!!

https://ithelp.ithome.com.tw/upload/images/20231008/201627758RXJQJ3KMD.png

https://ithelp.ithome.com.tw/upload/images/20231008/20162775AVpTBHkodg.png

Impossible

由前面的挑戰可知,通常 DOM 型的 XSS 漏洞都是因為前端沒有做好過濾而導致的,而在 Impossible 這個 level 將之前前端連結字串有一段 URL 解碼的部分直接去掉,這樣我們輸入的任何值都會經過URL編碼,進而可以避免XSS漏洞

https://ithelp.ithome.com.tw/upload/images/20231008/20162775fqBKXAOPwL.png

https://ithelp.ithome.com.tw/upload/images/20231008/20162775F5h38YtG9e.png

參考資料

https://www.runoob.com/php/


上一篇
Day 22 XSS (三) -- Stored XSS
下一篇
Day 24 Command Injection (一)
系列文
學分的追逐,資安的啟程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言